///**
// * Copyright (c) 2016-2019 人人开源 All rights reserved.
// * <p>
// * https://www.renren.io
// * <p>
// * 版权所有，侵权必究！
// */
//
//package com.pss.common.util;
//
//import com.alibaba.fastjson2.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.HashOperations;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//
//import java.util.Collection;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//import java.util.concurrent.TimeUnit;
//
///**
// * Redis工具类
// *
// */
//@Slf4j
//@Component
//public class RedisUtil {
//
//    @Autowired
//    private RedisTemplate<String, Object> redisTemplate;
//
//    /**
//     * 默认过期时长，单位：秒
//     */
//    public final static long DEFAULT_EXPIRE = 60 * 60 * 24;
//    /**
//     * 不设置过期时长
//     */
//    public final static long NOT_EXPIRE = -1;
//
//    /**
//     * Set value
//     * @param key
//     * @param value
//     */
//    public void set(String key, Object value) {
//        set(key, value, DEFAULT_EXPIRE);
//    }
//
//    /**
//     * Set value
//     * @param key
//     * @param value
//     * @param expire
//     */
//    public void set(String key, Object value, long expire) {
//        redisTemplate.opsForValue().set(key, toJson(value));
//        if (expire != NOT_EXPIRE) {
//            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
//        }
//    }
//
//    /**
//     * 如果为空就set值，并返回1
//     * 如果存在(不为空)不进行操作，并返回0
//     *
//     * @param key
//     * @param value
//     * @param expire
//     * @param timeUnit
//     * @return
//     */
//    public Boolean setIfAbsent(String key, byte[] value, long expire, TimeUnit timeUnit) {
//        return redisTemplate.opsForValue().setIfAbsent(key, String.valueOf(value), expire, timeUnit);
//    }
//
//    /**
//     * get value
//     * @param key
//     * @return
//     */
//    public String get(String key) {
//        return get(key, NOT_EXPIRE);
//    }
//
//    public String get(String key, long expire) {
//        String value = (String) redisTemplate.opsForValue().get(key);
//        if (expire != NOT_EXPIRE) {
//            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
//        }
//        return value;
//    }
//
//    public <T> T get(String key, Class<T> clazz) {
//        return get(key, clazz, NOT_EXPIRE);
//    }
//
//    public <T> T get(String key, Class<T> clazz, long expire) {
//        String value = (String) redisTemplate.opsForValue().get(key);
//        if (expire != NOT_EXPIRE) {
//            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
//        }
//        return value == null ? null : fromJson(value, clazz);
//    }
//
//
//    /**
//     * 删除key
//     * @param key
//     */
//    public void delete(String key) {
//        redisTemplate.delete(key);
//    }
//
//    /**
//     * 批量删除
//     * @param keys
//     */
//    public void delete(Collection<String> keys) {
//        redisTemplate.delete(keys);
//    }
//
//
//    /**
//     * Object转成JSON数据
//     * @param object
//     * @return
//     */
//    private String toJson(Object object) {
//        if (object instanceof Integer || object instanceof Long || object instanceof Float ||
//                object instanceof Double || object instanceof Boolean || object instanceof String) {
//            return String.valueOf(object);
//        }
//        return JSONObject.toJSONString(object);
//    }
//
//    /**
//     * JSON数据，转成Object
//     * @param json
//     * @param clazz
//     * @param <T>
//     * @return
//     */
//    private <T> T fromJson(String json, Class<T> clazz) {
//        return JSONObject.parseObject(json, clazz);
//    }
//
//    /**
//     * hash get set 操作
//     * @param key
//     * @param field
//     * @return
//     */
//    public Object hGet(String key, String field) {
//        return redisTemplate.opsForHash().get(key, field);
//    }
//
//    public Map<String, Object> hGetAll(String key) {
//        HashOperations<String, String, Object> hashOperations = redisTemplate.opsForHash();
//        return hashOperations.entries(key);
//    }
//
//    public void hmSet(String key, Map<String, Object> map) {
//        hmSet(key, map, DEFAULT_EXPIRE);
//    }
//
//    public void hmSet(String key, Map<String, Object> map, long expire) {
//        redisTemplate.opsForHash().putAll(key, map);
//
//        if (expire != NOT_EXPIRE) {
//            expire(key, expire);
//        }
//    }
//
//    public void hSet(String key, String field, Object value) {
//        hSet(key, field, value, DEFAULT_EXPIRE);
//    }
//
//    public void hSet(String key, String field, Object value, long expire) {
//        redisTemplate.opsForHash().put(key, field, value);
//
//        if (expire != NOT_EXPIRE) {
//            expire(key, expire);
//        }
//    }
//
//    /**
//     * set 有效期值 ,默认是秒
//     *
//     * @param key
//     * @param expire
//     */
//    public void expire(String key, long expire) {
//        expire(key, expire, TimeUnit.SECONDS);
//    }
//
//    public void expire(String key, long expire, TimeUnit timeUnit) {
//        redisTemplate.expire(key, expire, timeUnit);
//    }
//
//    public void hDel(String key, Object... fields) {
//        redisTemplate.opsForHash().delete(key, fields);
//    }
//
//    /**
//     * 计数器，自增
//     * @param key
//     * @return
//     */
//    public Long increment(String key) {
//        return increment(key, 1L, DEFAULT_EXPIRE);
//    }
//
//    public Long increment(String key, long l) {
//        return increment(key, l, DEFAULT_EXPIRE);
//    }
//
//    public Long increment(String key, long l, long expire) {
//        Long increment = redisTemplate.opsForValue().increment(key, l);
//        if (expire != NOT_EXPIRE) {
//            expire(key, expire);
//        }
//        return increment;
//    }
//
//    public Long decrement(String key) {
//        return decrement(key, 1L, DEFAULT_EXPIRE);
//    }
//
//    public Long decrement(String key, long l) {
//        return decrement(key, l, DEFAULT_EXPIRE);
//    }
//
//    public Long decrement(String key, long l, long expire) {
//        Long decrement = redisTemplate.opsForValue().decrement(key, l);
//        if (expire != NOT_EXPIRE) {
//            expire(key, expire);
//        }
//        return decrement;
//    }
//
//
//    // ---------------------    队列相关  start   ----------------------- //
//
//    /**
//     * 左进
//     *
//     * @param listName list名称
//     * @param value
//     */
//    public void leftPush(String listName, Object value) {
//        leftPush(listName, value, DEFAULT_EXPIRE);
//    }
//
//    /**
//     * 左进，带有效期
//     *
//     * @param listName list名称
//     * @param value    值
//     * @param expire   有效期
//     */
//    public void leftPush(String listName, Object value, long expire) {
//        redisTemplate.opsForList().leftPush(listName, value);
//
//        if (expire != NOT_EXPIRE) {
//            expire(listName, expire);
//        }
//    }
//
//
//    /**
//     * 右进
//     *
//     * @param listName list名称
//     * @param value
//     */
//    public void rightPush(String listName, Object value) {
//        rightPush(listName, value, DEFAULT_EXPIRE);
//    }
//
//    /**
//     * 右进，带有效期
//     *
//     * @param listName list名称
//     * @param value    值
//     * @param expire   有效期
//     */
//    public void rightPush(String listName, Object value, long expire) {
//        redisTemplate.opsForList().rightPush(listName, value);
//
//        if (expire != NOT_EXPIRE) {
//            expire(listName, expire);
//        }
//    }
//
//
//    /**
//     * 左出
//     *
//     * @param listName list名称
//     * @return
//     */
//    public Object leftPop(String listName) {
//        return redisTemplate.opsForList().leftPop(listName);
//    }
//
//    /**
//     * 右出
//     *
//     * @param listName list名称
//     * @return
//     */
//    public Object rightPop(String listName) {
//        return redisTemplate.opsForList().rightPop(listName);
//    }
//
//    /**
//     * 获取list长度
//     *
//     * @param listName list名称
//     * @return
//     */
//    public Long getListSize(String listName) {
//        return redisTemplate.opsForList().size(listName);
//    }
//
//    /**
//     * 获取list数据
//     *
//     * @param listName list名称
//     * @return
//     */
//    public List<Object> findListData(String listName) {
//        List<Object> listData = redisTemplate.opsForList().range(listName, 0, -1);
//        return listData;
//    }
//
//
//    /**
//     * 移除list中某个元素
//     *
//     * @param listName    list名称
//     * @param elementName 元素名称
//     * @return
//     */
//    public Long listRemoveData(String listName, String elementName) {
//        return listRemoveData(listName, 0, elementName);
//    }
//
//    /**
//     * 移除list中某个元素
//     * 说明：
//     * 1. 当number传入 0： 移除整个队列里的 目标值；
//     * 2. 当number传入1：移除整个队列里的第一个目标值；
//     *
//     * @param listName
//     * @param number
//     * @param elementName
//     * @return
//     */
//    public Long listRemoveData(String listName, long number, String elementName) {
//        return redisTemplate.opsForList().remove(listName, number, elementName);
//    }
//
//    /**
//     * 获取元素当前位置
//     *
//     * @param listName
//     * @param elementName
//     * @return
//     */
//    public int getElementPositonInList(String listName, String elementName) {
//        return getBeforeNumInList(listName, elementName) + 1;
//    }
//
//    /**
//     * 获取当前元素前面有多少元素
//     *
//     * @param listName
//     * @param elementName
//     * @return
//     */
//    public int getBeforeNumInList(String listName, String elementName) {
//        List<Object> listData = findListData(listName);
//        return listData.indexOf(elementName);
//    }
//
//
//    /**
//     * 获取当前元素后面有多少元素
//     *
//     * @param listName
//     * @param elementName
//     * @return
//     */
//    public int getAfterNumInList(String listName, String elementName) {
//        List<Object> listData = findListData(listName);
//        int listSize = listData.size();
//        int elementPosition = listData.indexOf(elementName) + 1;
//        return listSize - elementPosition;
//    }
//
//    /**
//     * 判断是否包含某个元素
//     * @param listName
//     * @param elementName
//     * @return
//     */
//    public boolean isContain(String listName, String elementName) {
//        List<Object> listData = findListData(listName);
//        return listData.contains(elementName);
//    }
//
//
//    // ---------------------    队列相关  end  ----------------------- //
//
//
//    /**
//     * 判断key是否存在
//     *
//     * @param key
//     * @return
//     */
//    public boolean hasKey(String key) {
//        return redisTemplate.hasKey(key);
//    }
//
//}
